/*
在一个m行n列的网格中，每个网格的各边的长度均相等，求由A(x1,y1)点到达B(x2,y2)点的最短路径条数，
其中1<=m,n<=30。输入保证x2>=x1,y2>=y1 如有下图网格，起点和终点分别是A(1,1),B（2，3） 则最短路线是:

       (1,1)->(1,2)->(1,3)->(2,3)
       (1,1)->(2,1)->(2,2)->(2,3)
       (1,1(->(1,2)->(2,2)->(2,3)

输入格式:
第一行输入网格的行数m和列数n 第二行输入A点的坐标 第三行输入B点的坐标

输出格式:
输出一个整数,表示从A点到达B点的最短路线条数

输入：
    6 7
    1 1
    2 3

输出：3
*/

#include<bits/stdc++.h>
using namespace std;
int main(){
	int m,n,x1,y1,x2,y2;
	cin>>m>>n>>x1>>y1>>x2>>y2;

    //官方要求是把第一行，第一列设为1，但其实可以把整个矩阵设为1
	vector<vector<int>> dp(m+1,vector<int>(n+1,1));
	//for(int i=0;i<=m;i++) dp[i][0]=1;
	//for(int j=0;j<=n;j++) dp[0][j]=1;

    //注意：循环的边界
	for(int i=x1+1;i<=x2;i++)
		for(int j=y1+1;j<=y2;j++){
			dp[i][j]=dp[i-1][j]+dp[i][j-1];
		}
	cout<<dp[x2][y2];
} 